/*
 * Licensed to the 南京汇海交通科技有限公司
 *
 * Copyright (c) 2025.
 * All rights reserved.
 *
 * 本软件属南京汇海交通科技有限公司所有，在未获得南京汇海交通科技有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.chframework.boot.web.exception.error;

import cn.hutool.json.JSONUtil;
import com.chframework.common.constant.ApplicationConstant;
import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.web.error.ErrorAttributeOptions;
import org.springframework.boot.web.reactive.error.DefaultErrorAttributes;
import org.springframework.web.reactive.function.server.ServerRequest;

import java.util.Map;

/**
 * spring-webflux全局异常处理 - 自定义错误属性
 */
public class GlobalErrorAttributes extends DefaultErrorAttributes {

    public GlobalErrorAttributes() {
        super();
    }

    @Override
    public Map<String, Object> getErrorAttributes(ServerRequest request, ErrorAttributeOptions options) {
        /* *****====== 这种方式很不优雅，也不美观仅作为一种等效的实现思路 ======***** */
        // 在正常的业务编码中捕获异常后这样传递参数
        // ServerWebExchange serverWebExchange = context.get(ServerWebExchange.class);
        // serverWebExchange.getAttributes().put(ApplicationConstant.RESPONSE_API_RESULT, apiResultJson);
        // 在全局异常处理程序中这样获取被传递过来的参数
        String errJson = request.exchange().getAttribute(ApplicationConstant.RESPONSE_API_RESULT);

        Map<String, Object> errorAttributes = super.getErrorAttributes(request, options);
        if (StringUtils.isNotEmpty(errJson) && JSONUtil.isTypeJSON(errJson)) {
            errorAttributes.put(ApplicationConstant.RESPONSE_API_RESULT, errJson);
        }
        return errorAttributes;
    }

}
